//单例模式 singleton.cc
//使得全局只有一个实例，并提供一个全局访问它的方法
#include <iostream>
#include <memory>
#include <mutex>
//未考虑多线程的影响  线程不安全
std::mutex g_mutex;
//懒汉模式
class Tool
{
public:
    using ptr = std::shared_ptr<Tool>;
    static Tool *getInstance()
    {
        std::lock_guard<std::mutex> guard(g_mutex);
        if(s_tool==nullptr){
            s_tool=new Tool();
        }
        return s_tool;
    }
private:
    Tool();
    Tool(Tool &) = delete;
    Tool(Tool &&) = delete;
    static Tool* s_tool;
};
//饿汉模式
template <class T>
T*  Singleton()
{
    static T* ptr=new T;
    return ptr;
}